package com.huluobo.a2308douyindemo.net

import android.app.Application
import android.content.Context
import androidx.room.Room
import com.huluobo.a2308douyindemo.db.DouYinDatabase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

/**
 *  Created by LC on 2025/10/16.
 *  使用Hilt的对外提供ApiService的实例,替代单例模式的RetrofitUtils
 *  @Module 代表当前类是一个Hilt的模块
 *  @InstallIn(SingletonComponent::class) 代表当前类安装时或者实例时是一个单例模式
 *  @Provides 代表当前方法的返回值ApiService 是对外提供的
 *  @Singleton 代表当前方法的返回值是单例的
 *
 *  当前类的作用: 只要在项目中使用到ApiService的位置,就会自动找到当前类,来提供ApiService的实例
 */
@Module
@InstallIn(SingletonComponent::class)
object ProviderFactory {
    @Provides
    @Singleton
    fun service(): ApiService = getService()

    //专门为礼物提供的接口
    @Provides
    @Singleton
    fun giftService(): ApiServiceGift = getGiftService()

    @Provides
    @Singleton
    fun database(@ApplicationContext application: Context): DouYinDatabase =
        Room.databaseBuilder(application, DouYinDatabase::class.java, "douyin.db")
            .allowMainThreadQueries()
            .build()
}